MySQL 8.0.32にはUNION ALLをするとWHERE句で日本語が使えなくなるバグが存在します
データアナリティクス事業本部のueharaです。
今回は、MySQL 8.0.32でテーブルをUNION ALL
した際に生じるバグを共有したいと思います。
バグの事象
こちらで報告されている通り、MySQL 8.0.32では、UNION ALLをするとWHERE句で検索条件として日本語を指定すると、以下のようなエラーが発生して処理が落ちてしまいます。
Cannot convert string '\xE5\x8C\x97\xE6\xB5\xB7...' from utf8mb4 to binary
したがって、次のような処理をすることが不可能になります。
WITH tmp_table AS ( SELECT name, data1 FROM table_a UNION ALL SELECT name, data1 FROM table_b ) SELECT * FROM tmp_table WHERE name = "田中太郎" -- ★条件として日本語が使えなくなる
また、これはビューでも同様のことが言えるため、Amazon RDSでMySQL 8.0.32を使用しており、かつAmazon QuickSightで当該RDSのUNION ALLを使用しているビューをソースとしている場合、フィルターで日本語が使えなくなります。(QuickSight上はエラーが発生しているようには見えませんが、検索でヒットしなくなります)
解決策
本事象はMySQL 8.0.33にバージョンアップすることで解決します。
RDSでは2023年6月15日にMySQL 8.0.33がリリースされています。
なお、2023年6月26日時点では、AWSの「Amazon RDS での MySQL のバージョン」ページではMySQL 8.0.32が最新かのように見えていますが、英語版のページに切り替えると8.0.33に対応していることが分かります。
- 日本語版
-
英語版
最後に
今回は、MySQL 8.0.32のUNION ALL
に関するバグを共有させて頂きました。
参考になりましたら幸いです。